<template>
	<view class="app">
		<pageHeader ref="pageHeader"></pageHeader>
		<!-- 轮播图 -->
		<mix-swiper :list="data.images"></mix-swiper>
		<view class="introduce column">
			<text class="title">{{ data.title }}</text>
			<view class="price-wrap row">
				<mix-price-view :price="data.price" :size="40"></mix-price-view>
				<text v-if="data.market_price > data.price" class="m-price">￥{{ data.market_price }}</text>
				<text v-if="loaded && !data.freight_template" class="tag">免邮费</text>
			</view>
			<view class="bot row">
				<text class="fill">销量: {{ data.sales || 0 }}</text>
				<text class="fill">库存: {{ data.stock || 0 }}</text>
				<text class="fill">浏览量: {{ data.look_num || 0 }}</text>
			</view>
		</view>
		<!--  分享 -->
		<view class="share-wrap row">
			<view class="icon row">
				<text class="mix-icon icon-iconfontxingxing"></text>
				<text>分享</text>
			</view>
			<text class="tit">发给好友看看吧~</text>
			<text class="mix-icon icon-bangzhu1"></text>
			
			<!-- #ifdef MP-WEIXIN -->
			<button type="primary" open-type="share">
				<view class="btn">
					立即分享
					<text class="mix-icon icon-you"></text>
				</view>
			</button>
			<!-- #endif -->
			<!-- #ifndef MP-WEIXIN -->
			<view class="btn" @click="doAppShare">
				立即分享
				<text class="mix-icon icon-you"></text>
			</view>
			<!-- #endif -->
		</view>
		<view class="c-list">
			<view v-if="data.skuData" class="row b-b" @click="showPopup('skuPopup')">
				<text class="tit">购买类型</text>
				<view class="con">
					<text class="attr">{{ currentSku.name || '' }}</text>
				</view>
				<text class="mix-icon icon-you"></text>
			</view>
			<view class="row b-b" @click="navTo('/pages/coupon/receiveCoupon', {login: true})">
				<text class="tit">优惠券</text>
				<text class="con red">领取优惠券</text>
				<text class="mix-icon icon-you"></text>
			</view>
			<!-- <view class="row b-b">
				<text class="tit">促销活动</text>
				<view class="con-list fill column">
					<text>新人首单送20元无门槛代金券</text>
					<text>订单满50减10</text>
					<text>订单满100减30</text>
					<text>单笔购买满两件免邮费</text>
				</view>
			</view> -->
			<view class="row b-b">
				<text class="tit">服务</text>
				<view class="con">
					<text class="service">7天无理由退换货 ·</text>
					<text class="service">假一赔十 ·</text>
				</view>
			</view>
		</view>
		<!-- 评价 -->
		<view id="rating" class="rating-wrap column" :class="{'no-data': !ratingData.data}">
			<view class="e-header" @click="navTo('/pages/rating/rating?id='+data._id)">
				<text class="tit">商品评价</text>
				<text>({{ ratingData.count || 0 }})</text>
				<text class="tip">好评率 {{ data.rating_ratio || 100 }}%</text>
				<text class="mix-icon icon-you"></text>
			</view> 
			<rating-item v-if="ratingData.data" :item="ratingData.data"></rating-item>
		</view>
		<view class="detail-desc">
			<view class="d-header center">
				<text>图文详情</text>
			</view>
			<jyf-parser
				ref="article"
				:html="data.content" 
				lazy-load 
				show-with-animation 
			></jyf-parser>
			<!-- <rich-text :nodes="data.content"></rich-text> -->
		</view>
		<!-- 底部操作菜单 -->
		<bottom-operation :infoData="data" @onOprationClick="onOprationClick"></bottom-operation>
		<!-- 规格面板 -->
		<sku v-if="data._id" ref="skuPopup" :infoData="data" @setSku="setCurrentSku" @addToCart="addToCart" @buyNow="buyNow"></sku>
		<!-- loading -->
		<mix-loading v-if="isLoading" :mask="true"></mix-loading>
	</view>
</template>

<script>
	import jyfParser from '@/components/jyf-parser/jyf-parser.vue'
	import pageHeader from './components/detail-page-header'//页面头
	import mixSwiper from './components/mix-swiper'//轮播图
	import ratingItem from '@/pages/rating/components/rating-item'//评价
	import bottomOperation from './components/bottom-operation'//底部栏
	import sku from './components/sku'//sku面板
	let _anchorList = [];
	export default{
		components: {
			jyfParser,
			pageHeader,
			mixSwiper,
			ratingItem,
			bottomOperation,
			sku
		},
		data() {
			return {
				currentSku: {},
				data: {
					images: [],
				},
				ratingData: {}, //评价
			};
		},
		onLoad(options){
			this.id = options.id;
			this.loadRating(); //加载评价
		},
		onShow() {
			this.loadData();
		},
		onPageScroll(e) {
			this.$refs.pageHeader && this.$refs.pageHeader.pageScroll(e);
		},
		// #ifdef MP-WEIXIN
		onShareAppMessage(res) {
			return {
				title: this.data.title,
				path: '/pages/product/detail?id='+this.data._id,
				imageUrl: this.data.thumb
			}
		},
		// #endif
		methods:{
			async loadData(){
				const res = await this.$request('product', 'getDetail', {
					id: this.id
				})
				if(res.status === 0){
					this.$util.msg(res.msg || '产品不存在或已下架');
					setTimeout(()=>{
						uni.navigateBack();
					}, 1000)
					return;
				}
				const data = res.data;
				data.content = data.content.replace(/img src="/g, 'img style="display:block;width:100%;height:auto" src="');
				this.data = data;
				this.$nextTick(()=>{
					this.calcAnchor();//计算锚点参数
				})
				//添加浏览历史
				this.addProductHistory();
			},
			//加载评价
			async loadRating(){
				const res = await this.$request('rating', 'getDetailRating', {
					product_id: this.id,
				})
				this.ratingData = res;
				this.$nextTick(()=>{
					this.calcAnchor();//计算锚点参数
				})
			},
			//加入购物车
			addToCart(){
				this.$util.throttle(async ()=>{
					const data = this.getConfirmData();
					if(!data){
						return;
					}
					const res = await this.$request('cart', 'add', data, {
						showLoading: true,
						login: true
					})
					if(!res){
						return;
					}
					this.log(res)
					this.$util.msg(res.msg);
					if(res.status === 1){
						this.hidePopup('skuPopup');
						this.$store.dispatch('getCartCount');//更新购物车数量
						uni.$emit('refreshCart');//更新购物车
					}
				})
			},
			//立即购买
			buyNow(){
				const data = this.getConfirmData();
				if(!data){
					return;
				}
				this.hidePopup('skuPopup');
				this.navTo('/pages/order/createOrder?data='+JSON.stringify(data), {
					login: true
				})
			},
			//设置当前选择sku
			setCurrentSku(data){
				this.currentSku = data;
			},
			//获取当前sku 如果没有sku返回默认规格
			getConfirmData(){
				const sku = this.currentSku._id ? this.currentSku: this.data.sku[0];
				if(sku.stock <= 0 || this.data.stock <= 0){
					this.$util.msg('库存不足');
					return false;
				}
				const data = {
					product_id: this.data._id,
					number: this.$refs.skuPopup.buyNumber || 1,
					sku: this.currentSku._id ? this.currentSku: this.data.sku[0]
				}
				return data;
			},
			//计算锚点参数
			async calcAnchor(){
				const size = await new Promise(res => {
					uni.createSelectorQuery().select('#rating').boundingClientRect(data => {
						res(data);
					}).exec();
				});
				const headerHeight = this.systemInfo.statusBarHeight + this.systemInfo.navigationBarHeight;
				const a1 = (size ? size.top : 0) - headerHeight;
				const a2 = (size ? size.bottom : 0) + uni.upx2px(12) - headerHeight;
				this.$refs.pageHeader.anchorList[1].top = a1;
				this.$refs.pageHeader.anchorList[2].top = a2;
				_anchorList = [0, a1, a2];
			},
			//添加浏览历史
			addProductHistory(){
				const data = this.data;
				let list = uni.getStorageSync('productHistory');
				if(!list){
					list = [];
				}
				const index = list.findIndex(item=> item.id === data._id);
				if(index !== -1){
					list.splice(index, 1);
				}
				list.unshift({
					id: data._id,
					thumb: data.thumb
				})
				uni.setStorageSync('productHistory', list);
			},
			//删除当前浏览历史
			delHistory(){
				let list = uni.getStorageSync('productHistory');
				if(!list){
					return;
				}
				const index = list.findIndex(item=> item._id === data._id);
				if(index === -1){
					return;
				}
				list.splice(index, 1);
				uni.setStorageSync('productHistory', list);
			},
			showPopup(key, type){
				this.$refs[key].open(type);
			},
			onOprationClick(type){
				this.showPopup('skuPopup', type);
			},
			doAppShare(){
				this.$util.throttle(async ()=>{
					const data = {
					    provider: "weixin",
					    scene: 'WXSceneSession',
					    type: 5,
						imageUrl: this.data.thumb,
						title: this.data.title,
						miniProgram: {
							id: 'gh_3dada2e0f833',
							path: '/pages/product/detail?id='+this.data._id,
							type: 0,
							webUrl: 'http://guoyunnet.com'
						},
					    success: res=> {
					        console.log("success:" + JSON.stringify(res));
					    },
					    fail: err=> {
					        console.log("fail:" + JSON.stringify(err));
					    }
					}
					uni.share(data);
				})
			},
		},
	}
</script>

<style>
	page{
		background-color: #f5f5f5;
	}
</style>
<style scoped lang='scss'>
	.app{
		padding-bottom: constant(safe-area-inset-bottom);
		padding-bottom: env(safe-area-inset-bottom); 
		
		&:after{
			content: '';
			display: block;
			width: 100%;
			height: 100rpx;
		}
	}
	/* 标题简介 */
	.introduce{
		background: #fff;
		padding: 20rpx 30rpx;
		
		.title{
			min-height: 44rpx;
			font-size: 32rpx;
			color: #333;
			line-height: 44rpx;
			font-weight: 700;
		}
		.price-wrap{
			min-height: 40rpx;
			margin-top: 28rpx;
			font-size: 26rpx;
		}
		.m-price{
			margin-left: 10rpx;
			margin-right: 16rpx;
			color: #999;
			text-decoration: line-through;
		}
		.tag{
			transform: translateY(4rpx);
			padding: 0 10rpx;
			margin-left: 8rpx;
			background: $base-color;
			font-size: 20rpx;
			color: #fff;
			line-height: 32rpx;
			border-radius: 4rpx;
			position: relative;
			bottom: 8rpx;
		}
		.bot{
			padding: 28rpx 0 10rpx 4rpx;
			font-size: 24rpx;
			color: #999;
		}
	}
	/* 分享 */
	.share-wrap{
		background: linear-gradient(to right, #fdf5f6, #fbebf6);
		height: 76rpx;
		padding: 0 30rpx;
		color: $base-color;
		
		.icon{
			width: 90rpx;
			height: 30rpx;
			border: 1px solid $base-color;
			border-radius: 4rpx;
			position: relative;
			overflow: hidden;
			font-size: 22rpx;
			
			&:after{
				position:absolute;
				left: -20rpx;
				top: -12rpx;
				content: '';
				width: 50rpx;
				height: 50rpx;
				border-radius: 50%;
				background-color: $base-color;
			}
		}
		.icon-iconfontxingxing{
			position:relative;
			z-index: 1;
			font-size: 24rpx;
			margin-left: 2rpx;
			margin-right: 10rpx;
			color: #fff;
		}
		.tit{
			flex: 1;
			font-size: 26rpx;
			color: #666;
			margin-left:14rpx;
		}
		.icon-bangzhu1{
			padding: 10rpx;
			font-size: 30rpx;
			display: none;
		}
		.btn{
			padding-left: 20rpx;
			font-size: 24rpx;
			color: $base-color;
		}
		.icon-you{
			font-size: 22rpx;
			margin-left: 4rpx;
			color: $base-color;
		}
	}
	.c-list{
		font-size: 26rpx;
		color: #888;
		background: #fff;
		
		.row{
			min-height: 82rpx;
			padding: 16rpx 30rpx;
			position:relative;
			
			&:after{
				border-color: #eaeaea;
			}
			&:last-child:after{
				border: 0;
			}
		}
		.tit{
			width: 140rpx;
		}
		.con{
			flex: 1;
			color: #333;
			
			.attr{
				margin-right: 10rpx;
			}
			.service{
				margin-right: 30rpx;
				
				&:last-child{
					margin: 0;
				}
			}
		}
		.con-list{
			color: #333;
			
			text{
				line-height: 40rpx;
			}
		}
		.red{
			color: $base-color;
		}
		.icon-you{
			font-size: 24rpx;
			color: #999;
		}
	}
	/* 评价 */
	.rating-wrap{
		padding: 20rpx 30rpx 0rpx;
		background: #fff;
		margin-top: 12rpx;
		
		&.no-data{
			padding: 10rpx 30rpx 10rpx;
		}
		.e-header{
			display: flex;
			align-items: center;
			height: 70rpx;
			font-size: 28rpx;
			color: #333;
		}
		.tit{
			font-size: 32rpx;
			color: #333;
			font-weight: 700;
			margin-right: 4rpx;
		}
		.tip{
			flex: 1;
			font-size: 26rpx;
			color: #999;
			text-align: right;
		}
		.icon-you{
			margin-left: 8rpx;
			font-size: 24rpx;
			color: #999;
		}
		.mix-rating-item::after{
			border: 0;
		}
	}
	/*  详情 */
	.detail-desc{
		margin-top: 12rpx;
		background: #fff;
		
		.d-header{
			height: 80rpx;
			font-size: 30rpx;
			color: #333;
				
			text{
				margin: 0 20rpx;
			}
			&:before, &:after{
				content: '';
				width: 60rpx;
				border-bottom: 1px solid #ccc; 
			}
		}
	}
</style>
